package com.project.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.common.api.BusinessApi;
import com.common.core.domain.AjaxResult;
import com.project.domain.bo.*;
import com.project.domain.entity.BizProjectInSchool;
import com.project.domain.entity.VProject;
import com.project.domain.entity.xjProject.BizXjProject;
import com.project.domain.entity.xjProject.BizXjProjectDocument;
import com.project.domain.entity.xjProject.BizXjProjectMember;
import com.project.domain.entity.zxProject.BizZxProject;
import com.project.domain.entity.zxProject.BizZxProjectDocument;
import com.project.domain.entity.zxProject.BizZxProjectMember;
import com.project.domain.vo.*;

import java.util.List;

public interface IProjectInitService extends BusinessApi {

    /**
     * 左上角根据状态的数量统计
     * @param projectInfoBo
     * @return
     */
    List<NavigationForProVo.NameAndCount> selectGroups(ProjectInfoBo projectInfoBo);

    /**
     * 获取科研人员-科研项目列表左侧导航栏
     * @return
     */
    List<NavigationForProVo> getProNavigation();

    /**
     * 获取项目各页签上方信息
     * @param proId
     * @return
     */
    ProInitOtherBaseInfoVo getProOtherInfo(String proId,String type);

    /**
     * 获取项目列表
     * @param projectInfoBo
     * @param type
     * @return
     */
    IPage<ProListInfoVo> getProList(ProjectInfoBo projectInfoBo, String type);

    //region 查询
    /**
     * 查询基础信息
     * @param proId
     * @return
     */
    VProject baseDetail(String proId);

    /**
     * 查询校级基础信息
     * @param proId
     * @return
     */
    BizXjProject xjDetail(String proId);

    /**
     * 查询纵向基础信息
     * @param proId
     * @return
     */
    BizZxProject zxDetail(String proId);

    /**
     * 项目成员信息
     * @param proId 项目号
     * @return
     */
    ProjectMemberInfoVo memDetail(String proId);

    /**
     * 项目校内课题信息
     * @param proId 项目号
     * @return
     */
    ProjectKetiInfoVo zxKetiDetail(String proId);

    /**
     * 查询纵向项目合作单位信息
     * @param proId 项目号
     * @return
     */
    ProjectCooperationUnitInfoVo zxCooperationUnitDetail(String proId);

    /**
     * 预算信息
     * @param proId 项目号
     * @return
     */
    ProjectBudgetInfoVo budgetDetail(String proId);

    /**
     * 经费信息
     * @param proId 项目号
     * @return
     */
    ProjectMoneyInfoVo moneyDetail(String proId);

    /**
     * 出账合同
     * @param proId 项目号
     * @return
     */
    ProjectBuyerInfoVo buyerDetail(String proId);

    /**
     * 文件信息
     * @param proId 项目号
     * @return
     */
    ProjectDocumentInfoVo documentDetail(String proId);

    /**
     * 衍生成果
     * @param proId 项目号
     * @return
     */
    ProjectAchievementInfoVo achievementDetail(String proId);

    /**
     * 执行过程
     * @param proId 项目号
     * @return
     */
    ProjectProcessInfoVo processDetail(String proId);

    /**
     * 根据项目号判断项目类型，调不同的接口
     * @param proId
     * @return
     */
    String getProClassByProId(String proId);
    //endregion

    //region 保存

    //region 校级
    /**
     * 保存校级项目信息
     * @param bizXjProject
     * @return
     */
    AjaxResult saveXjProInfos(BizXjProject bizXjProject);

    /**
     * 保存校级项目成员信息
     * @param xjProjectMemberList
     * @return
     */
    AjaxResult saveXjMember(ProjectTabListBo<BizXjProjectMember> xjProjectMemberList);

    /**
     * 保存文件信息
     * @param projectTabListBo
     * @return
     */
    AjaxResult saveXjFile(ProjectTabListBo<BizXjProjectDocument> projectTabListBo);
    //endregion

    //region 纵向
    /**
     * 保存纵向项目信息
     * @param bizZxProject
     * @param type
     * @return
     */
    AjaxResult saveZxProInfos(BizZxProject bizZxProject,String type);

    /**
     * 保存纵向项目成员信息
     * @param zxProjectMemberList
     * @return
     */
    AjaxResult saveZxMember(ProjectTabListBo<BizZxProjectMember> zxProjectMemberList);

    /**
     * 保存校内课题信息
     * @param projectTabListBo
     * @return
     */
    AjaxResult saveKetiList(ProjectTabListBo<BizProjectInSchool> projectTabListBo);

    /**
     * 保存合作单位信息
     * @param cooperateUnitBo
     * @return
     */
    AjaxResult saveCooperUnit(CooperateUnitBo cooperateUnitBo);

    /**
     * 保存纵向文件信息
     * @param projectTabListBo
     * @return
     */
    AjaxResult saveZxFile(ProjectTabListBo<BizZxProjectDocument> projectTabListBo);
    //endregion


    /**
     * 保存预算信息
     * @param projectBudgetBo
     * @return
     */
    AjaxResult saveBudget(ProjectBudgetBo projectBudgetBo);
    //endregion

    /**
     * 删除项目信息
     * @param proIds 项目号
     * @return
     */
    String delInfos(String proIds);

    /**
     * 项目保存并通过 + 新建时审核通过
     * @param proId 项目号
     * @param submitType 提交类型
     * @param taskId
     * @return
     */
    AjaxResult saveAndCheck(String proId,Integer submitType,String taskId);
}
